home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 14 / CU Amiga Magazine's Super CD-ROM 14 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-09].iso / CUCD / Programming / XPK / Source / test / testMemPack.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-04-15  |  2.8 KB  |  119 lines

  1. #define NAME     "testMemPack"
  2. #define REVISION "3"
  3. #define ENDCODE_NOCTRLC
  4.  
  5. /* Programmheader
  6.  
  7.     Name:        testMemPack
  8.     Author:        SDI
  9.     Distribution:    PD
  10.     Description:    tests Xpk Pack function
  11.     Compileropts:    -
  12.     Linkeropts:    -l xpkmaster amiga
  13.  
  14.  1.1   06.12.96 : fixed for new includes, added new WriteXpkFib
  15.  1.2   28.12.96 : changed TO/A to TO
  16.  1.3   15.04.97 : removed WriteXpkFib.c
  17. */
  18.  
  19. #include <pragma/exec_lib.h>
  20. #include <pragma/dos_lib.h>
  21. #include <pragma/xpkmaster_lib.h>
  22. #include <exec/memory.h>
  23. #include "SDI_defines.h"
  24.  
  25. #ifdef __MAXON__
  26.   #define __asm
  27.   #define __saveds
  28. #endif
  29.  
  30. struct Library        *XpkBase        = 0;
  31. ULONG            DosVersion        = 37;
  32. STRPTR            ibuf            = 0,
  33.             obuf            = 0;
  34. ULONG            ibuflen            = 0,
  35.             obuflen            = 0;
  36. BPTR            fh            = 0;
  37. struct RDArgs        *rda            = 0;
  38. struct FileInfoBlock    *fib            = 0;
  39.  
  40. #define PARAM "FROM/A,TO,METHOD"
  41.  
  42. LONG __asm __saveds chunkfunc(register __a1 struct XpkProgress *prog)
  43. {
  44.   switch(prog->xp_Type)
  45.   {
  46.   case XPKPROG_START: PutStr("Start: "); break;
  47.   case XPKPROG_MID: PutStr("\rMid  : "); break;
  48.   case XPKPROG_END: PutStr("\rEnd  : "); break;
  49.   }
  50.  
  51.   if(prog->xp_Type != XPKPROG_END)
  52.     Printf("%4s: %-8s (%3ld%% done, %2ld%% CF, %6ld cps) %s",
  53.       prog->xp_PackerName, prog->xp_Activity, prog->xp_Done,
  54.       prog->xp_CF, prog->xp_Speed, prog->xp_FileName);
  55.   else
  56.     Printf("%4s: %-8s (%3ldK, %2ld%% CF, %6ld cps) %s\033[K\n",
  57.       prog->xp_PackerName, prog->xp_Activity, prog->xp_ULen >> 10,
  58.       prog->xp_CF, prog->xp_Speed, prog->xp_FileName);
  59.  
  60.   Flush(Output());
  61.   return (LONG) SetSignal(0, SIGBREAKF_CTRL_C) & SIGBREAKF_CTRL_C;
  62. }
  63.  
  64. struct Hook chunkhook = { {0}, (ULONG (*)()) chunkfunc};
  65.  
  66. void main(void)
  67. {
  68.   UBYTE errbuf[XPKERRMSGSIZE+1];
  69.   ULONG olen;
  70.   struct {
  71.     STRPTR from;
  72.     STRPTR to;
  73.     STRPTR method;
  74.   } args = {0,0,0};
  75.  
  76.   if(!(rda = ReadArgs(PARAM, (LONG *) &args, 0)) ||
  77.   !(XpkBase = OpenLibrary(XPKNAME, 0)) ||
  78.   !(fh = Open(args.from, MODE_OLDFILE)) ||
  79.   !(fib = (struct FileInfoBlock *) AllocDosObject(DOS_FIB, 0)) ||
  80.   !(ExamineFH(fh, fib)) ||
  81.   !(ibuf = (STRPTR) AllocMem(fib->fib_Size, MEMF_ANY)) ||
  82.   Read(fh, ibuf, fib->fib_Size) != fib->fib_Size)
  83.     End(RETURN_FAIL);
  84.  
  85.   ibuflen = fib->fib_Size;
  86.   Close(fh); fh = 0;
  87.  
  88.   if(XpkPackTags(XPK_InBuf, ibuf, XPK_InLen, ibuflen,
  89.     XPK_PackMethod, args.method, XPK_GetOutBuf,
  90.     &obuf, XPK_GetOutBufLen, &obuflen, XPK_GetOutLen, &olen,
  91.     XPK_GetError, errbuf, XPK_ChunkHook, &chunkhook, TAG_DONE))
  92.   {
  93.     STRPTR a = errbuf;
  94.     VPrintf("Can't XpkPack: %s\n", &a);
  95.     End(RETURN_FAIL);
  96.   }
  97.  
  98.   if(args.to)
  99.   {
  100.     if(!(fh = Open(args.to, MODE_NEWFILE)) ||
  101.     Write(fh, obuf, olen) != olen)
  102.       End(RETURN_FAIL);
  103.   }
  104.  
  105.   End(RETURN_OK);
  106. }
  107.  
  108.  
  109. void end(void)
  110. {
  111.   if(fh)    Close(fh);
  112.   if(XpkBase)    CloseLibrary(XpkBase);
  113.   if(fib)    FreeDosObject(DOS_FIB, fib);
  114.   if(rda)    FreeArgs(rda);
  115.   if(ibuf)    FreeMem(ibuf, ibuflen);
  116.   if(obuf)    FreeMem(obuf, obuflen);
  117. }
  118.  
  119.